#include <iostream>
#include <vector>
using namespace std;
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
int n,m;
void dfs(int x,int y,const vector<vector<int>>& vecArr,vector<vector<int>>& dp){
	
	for(int i=0;i<4;++i){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx<0 || nx>=n || ny<0 || ny>=m || dp[nx][ny]>dp[x][y]+1 || vecArr[x][y]<=vecArr[nx][ny]){
			continue;
		}
		dp[nx][ny]=dp[x][y]+1;
		dfs(nx,ny,vecArr,dp);
	}
}
int main() {

	cin>>n>>m;
	vector<vector<int>> vecArr(n,vector<int>(m));
	vector<vector<int>> dp(n,vector<int>(m));
	for(int i=0;i<n;++i){
		for(int j=0;j<m;++j){
			cin>>vecArr[i][j];
		}
	}
	for(int i=0;i<n;++i){
		for(int j=0;j<m;++j){
			if(dp[i][j]==0){
				dp[i][j]=1;
				dfs(i,j,vecArr,dp);
			}
		}
	}
	
	int nRet=0;
	for(int i=0;i<n;++i){
		for(int j=0;j<m;++j){
			nRet=max(nRet,dp[i][j]);
		}
	}
	cout<<nRet<<endl;
	
	return 0;
}
